"""
任务四：迁移诊断可解释性分析配置文件（task4-new适配版本）

基于task1-new、task2-new、task3-new的更改，更新配置文件
"""

# 数据配置 - 基于task1-new和task3-new的最新输出
DATA_CONFIG = {
    'source_csv_path': '../task1-new/source_domain_selected_features_20250924_001757.csv',
    'target_csv_path': '../task1-new/target_domain_selected_features_20250924_001757.csv',
    'model_weights_path': '../task3-new/best_dann_model.pth',  # 如果存在的话
    'feature_columns': [
        'mean', 'std', 'max', 'min', 'peak_to_peak', 'rms', 'skewness', 'kurtosis',
        'crest_factor', 'shape_factor', 'impulse_factor', 'clearance_factor',
        'freq_mean', 'freq_std', 'freq_max', 'freq_centroid',
        'band_1_energy', 'band_2_energy', 'band_3_energy',
        'wavelet_0_energy', 'wavelet_0_std', 'wavelet_1_energy', 'wavelet_1_std',
        'wavelet_2_energy', 'wavelet_2_std', 'wavelet_3_energy', 'wavelet_3_std',
        'wavelet_4_energy', 'wavelet_4_std', 'stft_mean', 'stft_std'
    ],
    'exclude_columns': [
        'fault_type', 'file_name', 'fault_size', 'load_condition'
    ]
}

# 模型配置 - 基于task3-new的DANN模型
MODEL_CONFIG = {
    'input_dim': 30,  # 基于task1-new提取的30个特征
    'num_classes': 4,  # 4种故障类型
    'feature_dims': [32],  # 基于task3-new的特征维度
    'device': 'cpu'
}

# 可解释性分析配置
INTERPRETABILITY_CONFIG = {
    'feature_importance': {
        'top_n': 15,  # 减少到15个，因为只有30个特征
        'random_forest_estimators': 100
    },
    'domain_adaptation': {
        'tsne_perplexity': 10,  # 调整以适应小样本（34个源域样本）
        'tsne_components': 2
    },
    'fault_analysis': {
        'fault_types': {
            0: 'Ball',      # 滚动体故障
            1: 'Inner Race', # 内圈故障
            2: 'Normal',    # 正常
            3: 'Outer Race' # 外圈故障
        }
    },
    'visualization': {
        'figure_size': (16, 12),
        'dpi': 300,
        'colors': ['#2E8B57', '#DC143C', '#FF8C00', '#4169E1']  # 与task3-new保持一致
    }
}

# 轴承故障机理配置 - 基于题目文档
BEARING_FAULT_MECHANISM = {
    'fault_types': {
        'normal': {
            'name': '正常',
            'description': '轴承正常运行状态，无故障',
            'characteristics': ['低幅值振动', '平稳运行', '无异常频率成分'],
            'fault_frequency': '无'
        },
        'ball': {
            'name': '滚动体故障',
            'description': '滚动体表面存在缺陷或损伤',
            'characteristics': ['周期性冲击', 'BSF频率成分', '高频振动'],
            'fault_frequency': 'BSF (Ball Spin Frequency)'
        },
        'inner_race': {
            'name': '内圈故障',
            'description': '内圈滚道表面存在缺陷或损伤',
            'characteristics': ['BPFI频率成分', '周期性冲击', '中频振动'],
            'fault_frequency': 'BPFI (Ball Pass Frequency Inner)'
        },
        'outer_race': {
            'name': '外圈故障',
            'description': '外圈滚道表面存在缺陷或损伤',
            'characteristics': ['BPFO频率成分', '周期性冲击', '低频振动'],
            'fault_frequency': 'BPFO (Ball Pass Frequency Outer)'
        }
    },
    'feature_categories': {
        'time_domain': {
            'features': ['mean', 'std', 'max', 'min', 'peak_to_peak', 'rms', 'skewness', 'kurtosis'],
            'description': '时域特征，反映振动信号的基本统计特性'
        },
        'frequency_domain': {
            'features': ['freq_mean', 'freq_std', 'freq_max', 'freq_centroid', 'band_1_energy', 'band_2_energy', 'band_3_energy'],
            'description': '频域特征，反映信号的频率成分和能量分布'
        },
        'time_frequency_domain': {
            'features': ['wavelet_0_energy', 'wavelet_0_std', 'wavelet_1_energy', 'wavelet_1_std', 'wavelet_2_energy', 'wavelet_2_std', 'wavelet_3_energy', 'wavelet_3_std', 'wavelet_4_energy', 'wavelet_4_std', 'stft_mean', 'stft_std'],
            'description': '时频域特征，反映信号的时变特性和频率成分的时间演化'
        }
    },
    'fault_mechanism': {
        'impact_pulse': {
            'description': '当轴承出现局部缺陷时，滚动体在接触并通过缺陷点的瞬间，会产生突变的冲击脉冲',
            'characteristics': ['周期性冲击', '高频成分', '瞬态响应']
        },
        'periodic_impact': {
            'description': '在轴承周期性运转的过程中，这种脉冲力会持续作用，进而形成周期性的冲击分量',
            'characteristics': ['周期性特征', '故障频率', '谐波成分']
        },
        'vibration_response': {
            'description': '在传感器采集的振动信号中，由缺陷引发的周期冲击分量呈现为一系列类周期性的振动冲击及衰减响应',
            'characteristics': ['冲击响应', '衰减特性', '共振现象']
        }
    }
}

# 可解释性分析方法配置
ANALYSIS_METHODS = {
    'pre_hoc': {
        'feature_importance': True,
        'model_structure': True,
        'fault_mechanism': True
    },
    'migration_process': {
        'domain_adaptation': True,
        'feature_alignment': True,
        'gradient_reversal': True
    },
    'post_hoc': {
        'gradient_importance': True,
        'decision_boundary': True,
        'layer_activations': True
    }
}

# 输出配置
OUTPUT_CONFIG = {
    'save_plots': True,
    'save_reports': True,
    'save_data': True,
    'output_dir': './',
    'timestamp_format': '%Y%m%d_%H%M%S'
}

# 迁移学习可解释性配置
MIGRATION_INTERPRETABILITY = {
    'domain_analysis': {
        'source_domain': '试验台架数据（task1-new提取）',
        'target_domain': '实际运营列车数据（task1-new提取）',
        'migration_method': 'DANN (Domain Adversarial Neural Network)',
        'key_components': ['特征提取器', '分类器', '域判别器', '梯度反转层']
    },
    'interpretability_focus': {
        'pre_hoc': '模型结构设计和故障机理分析',
        'migration_process': '域适应过程和特征对齐分析',
        'post_hoc': '决策过程和诊断结果解释'
    }
}
